/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package db;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import beans.B_ControlAuditoria;
import beans.B_ObjetivoControlAuditoria;
import conexion.Conexion;
import java.sql.Types;

/**
 * @author JoseHernan Created on : 23-sep-2014, 22:52:48
 */
public class DB_ControlAuditoria {

    public static ArrayList<B_ControlAuditoria> getListByIdObjetivoControl(int idObjetivoControl) {
        ArrayList<B_ControlAuditoria> list = new ArrayList<B_ControlAuditoria>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;

            ps = con.prepareStatement(" select id, codigo, nombre, descripcion, informacion_adicional from tbl_control_auditoria where removed = false and id_objetivo_control_auditoria = " + idObjetivoControl + " order by codigo ");

            rs = ps.executeQuery();
            B_ControlAuditoria obj;
            while (rs.next()) {
                obj = new B_ControlAuditoria();
                //Asign values
                obj.setId(rs.getInt("id"));
                obj.setCodigo(rs.getString("codigo"));
                obj.setNombre(rs.getString("nombre"));
                obj.setDescripcion(rs.getString("descripcion"));
                obj.setInformacionAdicional(rs.getString("informacion_adicional"));
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    public static ArrayList<B_ControlAuditoria> getList(int id) {
        ArrayList<B_ControlAuditoria> list = new ArrayList<B_ControlAuditoria>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            if (id == 0) {
                ps = con.prepareStatement(" SELECT c.id, c.codigo, c.nombre, c.descripcion, c.informacion_adicional, c.id_objetivo_control_auditoria, o.nombre as objetivo_control_auditoria FROM tbl_control_auditoria c inner join tbl_objetivo_control_auditoria o on o.id = c.id_objetivo_control_auditoria where c.removed = false order by c.codigo ");
            } else {
                ps = con.prepareStatement(" SELECT c.id, c.codigo, c.nombre, c.descripcion, c.informacion_adicional, c.id_objetivo_control_auditoria, o.nombre as objetivo_control_auditoria FROM tbl_control_auditoria c inner join tbl_objetivo_control_auditoria o on o.id = c.id_objetivo_control_auditoria where c.removed = false and c.id = " + id);
            }
            rs = ps.executeQuery();
            B_ControlAuditoria obj;
            B_ObjetivoControlAuditoria objObjetivoControlAuditoria;
            while (rs.next()) {
                obj = new B_ControlAuditoria();
                //Asign values
                obj.setId(rs.getInt("id"));
                obj.setCodigo(rs.getString("codigo"));
                obj.setNombre(rs.getString("nombre"));
                obj.setDescripcion(rs.getString("descripcion"));
                obj.setInformacionAdicional(rs.getString("informacion_adicional"));
                objObjetivoControlAuditoria = new B_ObjetivoControlAuditoria();
                objObjetivoControlAuditoria.setId(rs.getInt("id_objetivo_control_auditoria"));
                objObjetivoControlAuditoria.setNombre(rs.getString("objetivo_control_auditoria"));
                obj.setObjObjetivoControlAuditoria(objObjetivoControlAuditoria);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    //SP CRUD
    public static String crud(B_ControlAuditoria obj, String action) {
        String result = "";
        CallableStatement cs = null;
        Connection con = Conexion.getConexion();
        try {
            cs = con.prepareCall("{call sp_crud_control_auditoria(?,?,?,?,?,?,?,?,?)}");

            cs.registerOutParameter("p_message", Types.VARCHAR);
            cs.setString("p_action", action);
            cs.setInt("p_id", obj.getId());
            cs.setString("p_codigo", obj.getCodigo());
            cs.setString("p_nombre", obj.getNombre());
            cs.setString("p_descripcion", obj.getDescripcion());
            cs.setString("p_informacion_adicional", obj.getInformacionAdicional());
            cs.setInt("p_id_objetivo_control_auditoria", obj.getObjObjetivoControlAuditoria().getId());
            cs.setString("p_user", obj.getUser());
            cs.executeUpdate();
            result = cs.getString(1);
        } catch (Exception ex) {
            result = ex.getMessage();
        } finally {
            try {
                cs.close();
                con.close();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return result;
    }
}
